package spaceinvaders.engine;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JPanel;
import spaceinvaders.elements.Elemento;
import spaceinvaders.elements.ElementoCriar;

/**
 *
 * @author Luis Freitas
 */
public class Espaco extends JPanel implements TimerListener {

    private Timer timer;
    private Elemento[] Canhao;
    private Elemento[][] Invasores;
    private boolean FlagInvasoresX;
    private boolean FlagInvasoresY;
    private boolean FlagCanhao;
    private int contInv;

    public Espaco() {
        this.setBackground(Color.BLACK);
        
        this.timer = new Timer(this, 50);
        this.Invasores = new Elemento[12][5];
        this.Canhao = new Elemento[1];
        this.FlagInvasoresX = false;
        this.FlagInvasoresY = false;
        this.FlagCanhao = false;
        this.contInv = 0;
    }

    public void Iniciar() {
        timer.start();

        // Criando o Canhao
        Canhao[0] = ElementoCriar.getInstance(this, ElementoCriar.ElementosAnimados.CANHAO, 400, 500);
        // Criando os Invasores;
        for (int x = 0; x < 12; x++) {
            for (int y = 0; y < 5; y++) {
                Invasores[x][y] = ElementoCriar.getInstance(this, ElementoCriar.ElementosAnimados.INVASOR, x, y);
                contInv++;
            }
        }
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        this.VerificaMovimento();

        Graphics2D g2 = (Graphics2D) g;

        //desenha o Espaco

        //desenha os Elementos Inertes

        //desenha os Elementos Animados
        Canhao[0].desenha(g2, ElementoCriar.ElementosAnimados.CANHAO, FlagCanhao, false);

        for (int j = 0; j < 12; j++) {
            for (int i = 0; i < 5; i++) {
                Invasores[j][i].desenha(g2, ElementoCriar.ElementosAnimados.INVASOR, FlagInvasoresX , FlagInvasoresY);
            }
        }

    }

    public void update() {
        this.repaint();
    }

    private void VerificaMovimento() {
        if ((Invasores[0][0].getPosX()) < 0  || (Invasores[11][0].getPosX() > 750)  ){
            this.FlagInvasoresX = true;
        } else {
            this.FlagInvasoresX = false;
        }
        if ((Invasores[0][4].getPosY() < 450) || (Invasores[11][4].getPosY() < 450)  ){
            this.FlagInvasoresY = false;
        } else {
            this.FlagInvasoresY = true;
        }
    }
}
